package com.zxw.netty;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

/**
 * @author zxw
 * @date 2024-09-20 14:31
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class NettyDoc {
    // 1. SO_BACKLOG（int）
    //定义等待连接队列的最大长度，即服务器允许的未处理连接数。
    //
    //128：常用默认值，适用于中等并发量。
    //
    //效果：中等规模的连接请求在高并发时较为稳定。
    //1024：适用于高并发的场景。
    //
    //效果：可以处理大量的并发请求，减少客户端连接被拒绝的情况。
    //50：适用于低并发的场景。
    //
    //效果：队列长度短，过多连接会因无法加入等待队列而被拒绝。
    //2. SO_REUSEADDR（boolean）
    //允许多个进程在相同的端口上绑定，但要确保没有进程处于监听状态。
    //
    //true：允许重用端口。
    //
    //效果：在服务重启或崩溃后，能更快重新绑定到同一端口。
    //false：不允许重用。
    //
    //效果：服务需要等待端口被完全释放才能重新启动。
    //3. SO_RCVBUF（int）
    //设置 TCP 接收缓冲区的大小。
    //
    //32 * 1024 (32KB)：适用于小数据量的传输。
    //
    //效果：内存消耗低，适用于短连接或小文件传输。
    //128 * 1024 (128KB)：适用于大数据量的传输。
    //
    //效果：更适合处理大文件或长时间的流式传输。
    //512 * 1024 (512KB)：更大的缓冲区。
    //
    //效果：优化了大数据流传输的性能，但会占用更多内存。
    //4. SO_SNDBUF（int）
    //设置 TCP 发送缓冲区的大小。
    //
    //32 * 1024 (32KB)：适合小数据包传输。
    //
    //效果：适合短连接场景或需要快速发送少量数据的场景。
    //128 * 1024 (128KB)：适合中等数据量的传输。
    //
    //效果：平衡性能和内存消耗，适合一般数据流应用。
    //512 * 1024 (512KB)：适合大量数据传输。
    //
    //效果：减少数据传输过程中的阻塞，适合长连接或大数据流应用。
    //5. TCP_NODELAY（boolean）
    //是否禁用 Nagle 算法（聚合小包以减少网络拥塞）。
    //
    //true：禁用 Nagle 算法，立即发送数据。
    //
    //效果：降低延迟，适合实时性要求高的应用，如在线游戏、即时通讯。
    //false：启用 Nagle 算法，聚合小包后发送。
    //
    //效果：提高网络吞吐量，减少小包的网络开销，适合大数据传输。
    //6. SO_KEEPALIVE（boolean）
    //是否开启 TCP keep-alive 检测，以保持长连接的活性。
    //
    //true：开启 keep-alive。
    //
    //效果：定期发送探测包，检测连接是否有效，适合长连接应用。
    //false：关闭 keep-alive。
    //
    //效果：不主动检测连接是否断开，适合短连接场景。
    //7. SO_LINGER（int）
    //控制 socket 关闭时的行为。
    //
    //0：立即关闭连接，不发送剩余的数据。
    //
    //效果：强制断开连接，不等待数据传输完成，适合紧急断连场景。
    //5：等待 5 秒，数据发送完毕后关闭连接。
    //
    //效果：给系统一些时间清理未发送的数据包，减少数据丢失风险。
    //-1：使用操作系统的默认行为。
    //
    //效果：默认行为一般会等待数据发送完成再关闭连接，适合一般应用场景。
    //8. SO_REUSEPORT（boolean）
    //允许多个进程绑定到同一个端口（一般用于负载均衡）。
    //
    //true：允许端口复用。
    //
    //效果：提高多线程或多进程服务器的扩展性，多个进程可以同时监听同一个端口。
    //false：不允许端口复用。
    //
    //效果：单个进程绑定端口，适合不需要负载均衡的场景。
    //9. IP_TOS（int）
    //设置 IP 层的服务类型 (Type of Service, TOS)。
    //
    //0：默认值，不设置特殊的优先级。
    //
    //效果：标准网络传输，适合一般应用。
    //0x10：最低延迟优先。
    //
    //效果：提高数据包的优先级，适合需要低延迟的应用，如视频会议。
    //0x08：最大吞吐量优先。
    //
    //效果：适合大数据量传输的应用，如文件传输。
    //10. ALLOW_HALF_CLOSURE（boolean）
    //是否允许 socket 半关闭（只关闭写入）。
    //
    //true：允许半关闭。
    //
    //效果：应用可以关闭输出流而保留输入流，适用于需要继续接收数据但不再发送的场景。
    //false：不允许半关闭。
    //
    //效果：关闭连接时同时关闭读写，适合不需要半关闭的简单连接。
}
